﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OF.Utility
{
    public class LocationDistanceHelper
    {
        /// <summary>
        /// 返回目标地点公里数
        /// </summary>
        /// <param name="longitude1">目标经度</param>
        /// <param name="latitude1">目标纬度</param>
        /// <param name="longitude2">当前位置经度</param>
        /// <param name="latitude2">当前位置纬度</param>
        /// <returns></returns>
        public static double Algorithm(double longitude1, double latitude1, double longitude2, double latitude2)
        {
            double Lat1 = rad(latitude1); // 纬度
            double Lat2 = rad(latitude2);
            double a = Lat1 - Lat2;//两点纬度之差
            double b = rad(longitude1) - rad(longitude2); //经度之差
            double s = 2 * Math.Asin(Math
                          .Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(Lat1) * Math.Cos(Lat2) * Math.Pow(Math.Sin(b / 2), 2)));//计算两点距离的公式
            s = s * 6378137.0;//弧长乘地球半径（半径为米）
            s = Math.Round(s * 10000d) / 10000d;//精确距离的数值
            return s / 1000;
        }
        private static double rad(double d)
        {
            return d * Math.PI / 180.00; //角度转换成弧度
        }
    }
}
